
//1020.飞地的数量
class Solution {
public:
    int numEnclaves(vector<vector<int>>& grid) {
        int n=grid.size(),m=grid[0].size();
        int dx[]={0,0,1,-1};
        int dy[]={1,-1,0,0};

        function<void(int,int)> dfs=[&](int x,int y)
        {
            grid[x][y]=-1;     //对与边界相邻的单元格进行标记
            for(int k=0;k<4;k++)
            {
                int a=x+dx[k];
                int b=y+dy[k];
                if(a>=0&&a<n&&b>=0&&b<m&&grid[a][b]==1) dfs(a,b);
            }   
        };
        for(int i=0;i<n;i++)   //遍历上下边界
        {
            if(grid[i][0]>0) dfs(i,0);
            if(grid[i][m-1]>0) dfs(i,m-1);
        }
        for(int j=0;j<m;j++)  //遍历左右边界
        {
            if(grid[0][j]>0) dfs(0,j);
            if(grid[n-1][j]>0) dfs(n-1,j);
        }
        int ret=0;
        for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
        if(grid[i][j]>0) ret++;

        return ret;
    }
};